from .dbpool_utils import Db_Pool_Utils
from .list_utils import split_list
from .minio_utils import Minio_Utils
from .nacos_utils import Nacos_Utils
from .redis_utils import Redis_Utils
from .task_utils import del_minio_file
from .async_executor_utils import  read_sql_async
from .request_utils import Request_Utils
from .dotenv_utils import  init_dotenv


def init_utils(app):
    '''初始化需要使用的plug or utils

    :param app:
    :return:
    '''

    #初始化nacos服务注册
    # init_nacos_middleware(app)
    #初始化数据库连接池
    init_dbpool(app)
    #初始化redis 链接池
    # init_redis_pool(app)
    #初始化定时任务
    init_apscheduler()
    #初始化加载.sanicenv系统环境变量
    init_dotenv()





def init_nacos_middleware(app):
    """初始化nacos 组件

    :param app:
    :return:
    """
    # 创建对象
    # nacos_utils=Nacos_Utils(app.config)
    nacos_utils = Nacos_Utils(app.config)
    # 注册nacos服务
    nacos_utils.register_nacos_service()
    # 监听健康状态
    nacos_utils.service_healthy_check()



def init_dbpool(app):
    """初始化数据库连接池

    :param app:
    :return:
    """
    import psycopg2
    import pymysql
    # 命名方式，数据库类型_数据库dbconfig中名字_pool
    PGSQL_MDP_POOL = Db_Pool_Utils(psycopg2, app.config.PG_MDP_CONF).get_db_pool()
    app.config.update({'PGSQL_MDP_POOL': PGSQL_MDP_POOL})
    # 初始化minio历史条件表数据库连接池
    # MYSQL_DATA_APP = Db_Pool_Utils(pymysql, app.config.MYSQL_APP_CONF).get_db_pool()
    APP_DBPOOL = Db_Pool_Utils(psycopg2, app.config.PG_APP_CONF).get_db_pool()
    # app.config.update({'MYSQL_DATA_APP': MYSQL_DATA_APP})
    app.config.update({'APP_DBPOOL': APP_DBPOOL})



def init_redis_pool(app):
    """初始化redis 连接池

    :rtype: object
    :param app:
    :return:
    """
    REDIS_POOL = Redis_Utils(app.config).get_redis_pool()
    app.config.update({'REDIS_POOL': REDIS_POOL})
    pass


def init_apscheduler():
    """初始化定时任务

    :return:
    """
    from apscheduler.schedulers.background import BackgroundScheduler
    scheduler = BackgroundScheduler()
    #定时启动del_minio_file,每天0点处理一次
    # scheduler.add_job(del_minio_file, 'interval', seconds=5)
    scheduler.add_job(del_minio_file, 'cron', hour='0')
    scheduler.start()

